#include <bits/stdc++.h>

typedef long long LL;
using namespace std;

const int NUM = 1e3+10;

vector<string> board;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int m,n;


LL cal(int px,int py,vector<string>& tmp_board)
{
	LL ret=0;
	int count=0;
	for(int k=0;k<4;k++)
	{
		int x=px+dx[k];
		int y=py+dy[k];
		if(x>=0 && x<n && y>=0 && y<m && tmp_board[x][y]==tmp_board[px][py])
		{
			count++;
		}
	}
	ret+=(count*count);
	return ret;
}

void fanzhuan(vector<int>& path,vector<string>& tmp_board)
{
	for(int i=0;i<path.size();i++)
	{
		for(int j=0;j<m;j++)
		{
			tmp_board[i][j]=(tmp_board[i][j]=='0')?'1':'0';
		}
	}
}

int dfs(int start,vector<int>& path)
{
	LL ret=0;
	for(int i=start;i<n;i++)
	{
		vector<string> tmp_board(board);
		path.push_back(i);
		fanzhuan(path,tmp_board);
		
		LL tmp=0;
		for(LL x=0;x<n;x++)
		{
			for(LL y=0;y<m;y++)
			{
				tmp+=cal(x,y,tmp_board);
			}
		}
		ret = max(ret,tmp);
		
	}
	return ret;
	
}

int main()
{
	LL ret=0;
	cin>>n>>m;
	for(LL i=0;i<n;i++)
	{
		string tmp;
		cin>>tmp;
		board.push_back(tmp);
	}
	
	for(LL i=0;i<n;i++)
	{ 
		vector<int> path;
		LL num = dfs(i,path);
		ret = max(ret,num);
	}
	cout<<ret<<endl;
	return 0;
}
